In computer science, a thread of execution is the smallest unit of processing that can be scheduled by an operating system. In most cases, a thread is contained inside a process. Inter-process communication (IPC) is a set of methods for the exchange of data among multiple threads in one or more processes.
Conventional operating systems can be divided into two layers, user space and kernel space. Application code resides in user space, while the underlying facilities of the operating system reside in the kernel space. An IOCTL (input/output control) is a single system call by which user space may communicate with device drivers. The kernel can then allow the user space to access a device driver without knowing anything about the facilities supported by the device, and without needing a large collection of system calls.
When a computer program needs to connect to a local or wide area network such as the Internet, it uses a software component called a socket. The socket opens the network connection for the program, allowing data to be read and written over the network. The sockets allow the programs to use the operating system's built-in commands and protocol stacks to handle networking functions. IPC flows use sockets.
Netlink is an existing full-duplex communication link between the Linux Operating System's user space and Kernel. It makes use of the standard socket APIs for user-space processes, and a special kernel API for kernel modules. Netlink sockets provide the possibility of multicast inside the kernel. Netlink sockets provide a bidirectional communication channel; a message transfer can be initiated by either the kernel or the user space application. They have less overhead (header and processing) compared to standard UDP sockets.
In order to meet the performance requirements of protocols operating at high speeds (such as Ethernet at 10 Gbps or 100 Gbps) it is necessary to rethink how popular Inter-Process Communication (IPC) techniques can be used and implemented more efficiently while preserving the native services of an Operating System (such as, but not limited to, Linux) and more specifically the delineation of functions and rights for processes operating in the user space or application level and kernel level. Whenever an application reads or writes data to a socket, it's using a system call. This call (such as read or write) crosses the boundary of the user space application to the kernel. Additionally, prior to getting to the kernel, the call goes through the C library to a common function in the kernel (system_call( )). From system_call( ) this call gets to the filesystem layer, where the kernel determines what type of device it's dealing with.
Even with some of the most recent enhancements to OS's such as Linux, the context switching overhead is still too high, especially when building cost sensitive platforms using lower cost CPUs and other programmable devices. As such, the embodiment shows that it can deliver the required performance improvements (and overhead reduction) without the need to modify the underlying hardware platform.
For instance, the embodiment is used to handle recently developed protocols (such as Y.1731) that require the ability to process Service OAM messages at exactly every 3.33 msec (which is a much higher rate than what is permissible with a typical OS: usually in the range of 10-20 msec).